package com.feri.api.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.feri.api.dao.CartDao;
import com.feri.api.dto.CartAddDto;
import com.feri.api.dto.CartUpdateDto;
import com.feri.api.service.intf.CartService;
import com.feri.api.vo.R;
import com.feri.common.entity.Cart;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @Description:
 * @Author: 学习强国
 * @Date: 2022/10/02 13:26:55
 */
@Service
public class CartServiceImpl implements CartService {
    @Autowired
    private CartDao dao;

    @Override
    public R add(CartAddDto dto, String token) {
        //入参校验
        if (dto != null) {
            //新增的不为空，可以新增
            //再判断这个商品是否需要新增（如果商品没有加入过购物车，则新增，若加入过则更改数量即可）
            //要判断这个用户下面这个商品对应的购物车对象是否存在
            long uid = Long.parseLong(token);
            Cart cart = dao.selectOne(new QueryWrapper<Cart>().eq("uid", uid).eq("gid", dto.getGid()));
            if (cart != null) {
                //加入过
                //修改数量,在原有的基础上加上传入的num即为修改后的num
                cart.setNum(cart.getNum() + dto.getNum());
                if (dao.updateById(cart) > 0) {
                    return R.ok("数量修改成功");
                } else {
                    return R.fail("sql语句有问题请排查");
                }
            } else {
                //没加入过
                if (dao.insert(new Cart(uid, dto.getGid(), dto.getNum(), dto.getPrice())) > 0) {
                    return R.ok("新增购物车成功");
                } else {
                    return R.fail("新增语句有问题");
                }

            }
        } else {
            return R.fail();
        }

    }

    @Override
    public R updateNum(CartUpdateDto dto) {
        //入参校验
//        if (JedisUtil.exists(RedisKeyConfig.))查看该用户登录状态
        if (dto != null) {
            //可以修改
            //验证数据库中是否有这个购物车对象,传入的有购物车id唯一，则可以用selectById（）
            Cart cart = dao.selectById(dto.getId());
            if (cart != null) {
                //判断修改的数量是否大于0，大于0给修改，小于0说明异常，等于0说明不修改
                if (dto.getNum() > 0) {
                    //说明数据库有
                    //修改
                    cart.setNum(dto.getNum());
                    if (dao.updateById(cart) > 0) {
                        return R.ok("修改数量成功");
                    } else {
                        return R.fail("byid修改sql出错");
                    }
                } else {
                    //即接口给后端的修改数量小于等于0
                    //应该是出了异常,不予操作，直接返回
                    cart.setNum(1);
                    if (dao.updateById(cart) > 0) {
                        return R.fail("数量必须大于1哟，已经给你修改过来了，请输入正确的购买数量");
                    } else {
                        return R.fail("byid语句出错");
                    }
                }
            } else {
                //数据库没有这个对象
                return R.fail("库里没有这个商品哦，请检查所传数据");
            }
        } else {
            return R.fail("所传数据为空");
        }
    }

    @Override
    public R del(List<Long> ids) {
        if (ids.size() > 0) {
            if (dao.deleteBatchIds(ids) > 0) {
                return R.ok("批量删除成功");
            } else {
                return R.fail("dao层批量删除有问题");
            }
        } else {
            return R.fail("没选择呢还，删什么");
        }
    }

    @Override
    public R queryMy(String token) {
        return R.ok(dao.selectByUid(Long.parseLong(token)));
    }
}